const api = require('../../utils/request');

Page({
  data: {
    // 搜索相关数据
    searchValue: '',
    category: '全部',
    categories: [
      { text: '全部', value: 'all' },
      { text: '动画', value: 2 },
      { text: '书籍', value: 1 },
      { text: '音乐', value: 3 },
      { text: '游戏', value: 4 },
      { text: '三次元', value: 6 }
    ],
    showCategoryDropdown: false,
    searchType: 'fuzzy', // 'fuzzy' or 'exact'
    
    // 搜索结果
    searchResults: [],
    isLoading: false,
    
    // 分页
    currentPage: 1,
    pageSize: 10,
    totalResults: 0
  },

  // 切换分类下拉菜单
  toggleCategoryDropdown() {
    this.setData({
      showCategoryDropdown: !this.data.showCategoryDropdown
    });
  },

  // 选择分类
  selectCategory(e) {
    const category = e.currentTarget.dataset.category;
    this.setData({
      category: category.text,
      showCategoryDropdown: false
    });
  },

  // 切换搜索类型
  toggleSearchType() {
    this.setData({
      searchType: this.data.searchType === 'fuzzy' ? 'exact' : 'fuzzy'
    });
  },

  // 输入搜索内容
  onSearchInput(e) {
    this.setData({
      searchValue: e.detail
    });
  },

  // 执行搜索
  onSearch() {
    if (!this.data.searchValue.trim()) {
      wx.showToast({
        title: '请输入搜索内容',
        icon: 'none'
      });
      return;
    }

    this.setData({
      isLoading: true,
      currentPage: 1
    }, () => {
      this.fetchSearchResults();
    });
  },

  // 获取搜索结果
  async fetchSearchResults() {
    try {
      const { searchValue, category, searchType, currentPage, pageSize } = this.data;
      // 验证搜索关键词
      if (!searchValue || !searchValue.trim()) {
        wx.showToast({ title: '搜索内容不能为空', icon: 'none' });
        return;
      }
  
      // 分类映射
      const typeMap = {
        '动画': 2,
        '书籍': 1,
        '音乐': 3,
        '游戏': 4,
        '三次元': 6
      };
  
      // 构造请求参数
      const params = {
        limit: pageSize,
        offset: (currentPage - 1) * pageSize
      };
  
      // 构造请求体
      const body = {
        keyword: searchValue.trim(),
        sort: 'match', // 默认按匹配度排序
        filter: {
          nsfw: false
        }
      };
  
      // 如果不是"全部"分类，添加类型过滤
      if (category !== '全部' && typeMap[category]) {
        body.filter.type = [typeMap[category]];
      }
  
      // 精确搜索处理
      if (searchType === 'exact') {
        // 精确搜索时使用名称完全匹配
        body.filter.name = [searchValue.trim()];
        // 可以添加更多精确匹配条件
        body.filter.name_cn = [searchValue.trim()];
      }
  
      console.log('发送搜索请求:', { params, body });
  
      // 调用API
      const res = await api.searchSubjects(
        params.limit,
        params.offset,
        body
      ).catch(err => {
        console.error('API调用失败:', err);
        throw new Error('API请求失败');
      });
  
      console.log('收到API响应:', res);
  
      // 验证响应数据
      if (!res || typeof res !== 'object') {
        throw new Error('无效的API响应格式');
      }
  
      this.setData({
        searchResults: this.formatResults(res.data || []),
        totalResults: res.total || 0,
        isLoading: false
      });
  
    } catch (error) {
      console.error('搜索流程错误:', error);
      wx.showToast({
        title: `搜索失败: ${error.message || '未知错误'}`,
        icon: 'none',
        duration: 2000
      });
      this.setData({ isLoading: false });
    }
  },

  // 格式化搜索结果
  formatResults(results) {
    return results.map(item => ({
      id: item.id,
      imageUrl: item.images?.medium || '/images/default_subject.png',
      nameCn: item.name_cn || item.name,
      name: item.name,
      infoItems: [
        `类型: ${this.getTypeName(item.type)}`,
        `年份: ${item.date?.split('-')[0] || '未知'}`,
        item.type === 1 ? `册数: ${item.volumes || '未知'}` : `集数: ${item.eps || '未知'}`
      ],
      rank: item.rank?.toString() || '',
      ratingScore: item.rating?.score?.toFixed(1) || '',
      ratingTotal: item.rating?.total?.toString() || '',
      collection: 'default',
      // 保留原始数据，用于跳转详情页
      rawData: item
    }));
  },

  // 获取类型名称
  getTypeName(type) {
    const types = {
      1: '书籍',
      2: '动画',
      3: '音乐',
      4: '游戏',
      6: '三次元'
    };
    return types[type] || '未知';
  },

  // 点击条目卡片
  onItemClick(e) {
    const itemData = e.detail.itemData;
    console.log(itemData)
    wx.navigateTo({
      url: `/pages/item-detail/item-detail?id=${itemData.id}`
    });
  },

  // 上一页
  prevPage() {
    if (this.data.currentPage > 1) {
      this.setData({
        currentPage: this.data.currentPage - 1
      }, () => {
        this.fetchSearchResults();
      });
    }
  },

  // 下一页
  nextPage() {
    const totalPages = Math.ceil(this.data.totalResults / this.data.pageSize);
    console.log(this.data)
    if (this.data.currentPage < totalPages) {
      this.setData({
        currentPage: this.data.currentPage + 1,
      }, () => {
        this.fetchSearchResults();
      });
    }
  },

  // 跳转到指定页
  changePage(e) {
    const page = parseInt(e.currentTarget.dataset.page);
    if (page !== this.data.currentPage) {
      this.setData({
        currentPage: page
      }, () => {
        this.fetchSearchResults();
      });
    }
  }
});